/**
 * @param {number[]} nums
 * @return {number}
 */
var jump = function (nums) {
  let len = nums.length; // 数组长度
  let maxPosition = 0; // 当前能跳到的最远位置
  let end = 0; // 当前跳跃范围的右边界
  let steps = 0; // 跳跃次数

  // 遍历到倒数第二个元素，因为最后一步不需要再跳
  for (let i = 0; i < len - 1; i++) {
    // 更新当前能跳到的最远位置
    maxPosition = Math.max(maxPosition, i + nums[i]);
    if (i === end) { // 当遍历到当前跳跃范围的边界时
      end = maxPosition; // 更新边界为下一步能跳到的最远位置
      steps++; // 跳跃次数加1
    }
  }

  return steps;
};